package myzzyl.controller;



import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import myzzyl.domain.dto.SysDeptDto;
import myzzyl.domain.pojo.SysDept;
import myzzyl.domain.vo.SysDeptVo;
import myzzyl.domain.vo.TreeVo;
import myzzyl.response.BaseResponse;
import myzzyl.service.SysDeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/dept")
@Tag(name = "部门相关")
@Slf4j
public class DeptController {

    @Autowired
    private SysDeptService sysDeptService;


    /**
     * 获取父级编号下的所有子部门
     */
    @PostMapping("/list")
    public BaseResponse<List<SysDeptVo>> list(@RequestBody SysDeptDto sysDeptDto) {
        log.info("获取父级编号下的所有子部门：{}", sysDeptDto);
        List<SysDeptVo> sysDeptVoList = sysDeptService.getAll(sysDeptDto);
        return BaseResponse.success(sysDeptVoList);
    }


    /**
     * 获取所有部门及其子部门
     */
    @PostMapping("/tree")
    public BaseResponse<TreeVo> tree(@RequestBody SysDeptDto sysDeptDto) {
        log.info("获取所有部门及其子部门: {}", sysDeptDto);
        TreeVo treeVo = sysDeptService.tree(sysDeptDto);
        return BaseResponse.success(treeVo);
    }

    /**
     * 获取部门详情
     */
    @GetMapping("/{deptNo}")
    public BaseResponse<SysDeptVo> getInfo(@PathVariable Long deptNo) {
        log.info("获取部门详情:{}", deptNo);
        return BaseResponse.success(sysDeptService.getInfo(deptNo));
    }


    /**
     * 新增部门
     */
    @PostMapping
    public BaseResponse<Boolean> add(@RequestBody SysDeptDto sysDeptDto) {
        log.info("新增部门:{}", sysDeptDto);
        return sysDeptService.add(sysDeptDto) ? BaseResponse.success(true) :
                BaseResponse.error(false);
    }


    /**
     * 编辑部门
     */
    @PutMapping
    public BaseResponse<Boolean> edit(@RequestBody SysDeptDto sysDeptDto) {
        log.info("编辑部门:{}", sysDeptDto);
        return sysDeptService.edit(sysDeptDto) ? BaseResponse.success(true) :
                BaseResponse.error(false);
    }

    /**
     * 删除部门
     */
    @DeleteMapping("/{deptNo}")
    public BaseResponse<Boolean> remove(@PathVariable String deptNo) {
        log.info("删除部门:{}", deptNo);
        return sysDeptService.remove(deptNo) ? BaseResponse.success(true) :
                BaseResponse.error(false);
    }

    /**
     * 启用或禁用部门
     */
    @PutMapping("/is_enable")
    public BaseResponse<Boolean> enableOrDisableSysDept(@RequestBody SysDeptDto sysDeptDto) {
        log.info("启用或禁用部门:{}", sysDeptDto);
        return sysDeptService.enableOrDisableSysDept(sysDeptDto) ? BaseResponse.success(true) :
                BaseResponse.error(false);
    }

}
